package obligatorio;
import java.util.LinkedList;
import java.util.concurrent.Semaphore;

public class Timer extends Thread {
	private static int tiempo;
	public static int posicion=0;
	public static int getTiempo() {
		return tiempo;
	}
	private boolean termino;
	LinkedList<Semaphore> SemControl;
	Semaphore SemTiempo;
	Central911 unaCentral;

	private int linea;
	LinkedList<Llamada> simulacion = new LinkedList();
	String[]separador;

	Semaphore vacio; // Proteger la lista de emergencias.
	Semaphore mutex; // Proteger la lista de emergencias.
	Semaphore ocupado;

	public Timer(Semaphore mutex,Semaphore vacio,Semaphore ocupado,Semaphore semTiempo,Semaphore Operador1,Semaphore Operador2,Semaphore Operador3,Central911 unaCentral){
		SemControl=new LinkedList<Semaphore>();
		this.mutex=mutex;
		this.vacio=vacio;
		this.ocupado=ocupado;
		this.SemTiempo=semTiempo;
		this.SemControl.add(Operador1);
		this.SemControl.add(Operador2);
		this.SemControl.add(Operador3);
		tiempo=-1;
		linea=0;
		this.termino=false;
		this.unaCentral = unaCentral;
		this.simulacion = unaCentral.llamadasEntrada;
		}
	
	public void run(){
		while (true){
			try{
				for(int i=0; i<SemControl.size();i++){
					SemTiempo.acquire(); // Duermo el tiempo tantos operadores tenga.
				}
			}
			catch(InterruptedException e){e.printStackTrace();}

			System.out.println(" ");
			tiempo++; // Comienza un ciclo de tiempo.

			while(!(this.termino)){ /* Mientras la simulacion no finalice y el tiempo en que llega la linea extraida del archivo 
				este en el tiempo trabajado hacer. */
				simulacion = unaCentral.llamadasEnEspera;
			}
			if(this.termino&&unaCentral.llamadasEnEspera.isEmpty()){ // Si la simulacion temrino y 
				//no hay mas operaciones en la lista.
				try{
					SemTiempo.acquire();
				}
				catch(InterruptedException e){e.printStackTrace();}
			}

			// Libero a todos los operadores de la central911.
			for(int i=0;i<SemControl.size();i++){
				SemControl.get(i).release();
				SemTiempo.release();
			}	

		}
		}
	}

